/**
 * 
 */
package com.cplsystems.incidencias.vm;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.zkoss.bind.BindUtils;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.GlobalCommand;
import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.select.annotation.VariableResolver;

import com.cplsystems.incidencias.app.MetaData;
import com.cplsystems.incidencias.app.utils.IncidenciasConstants;
import com.cplsystems.incidencias.app.utils.IncidenciasUtils;
import com.cplsystems.incidencias.business.Organizacion;
import com.cplsystems.incidencias.business.Transaccion;

/**
 * @author César Palalía López (csr.plz@aisa-automation.com)
 * 
 */
@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class HeaderVM extends MetaData {

	private static final long serialVersionUID = -1635442587326363484L;
	private String compania;
	private String usuario;
	private List<Transaccion> transacciones;
	private int totalTransacciones;
	private Organizacion organizacion;

	@Init
	public void init() {
		organizacion = (Organizacion) sessionUtils
				.getFromSession(IncidenciasUtils
						.encrypt(IncidenciasConstants.FIRMA));
		if (organizacion != null) {
			compania = organizacion.getNombre();
			updateTransacciones();
		}
	}

	@Command
	public void logOut() {
		sessionUtils.logOut();
		incidenciasUtils.redirect(IncidenciasConstants.GLOBAL_PAGES.LOGIN_URL);
	}

	@NotifyChange({ "transacciones", "totalTransacciones" })
	@GlobalCommand
	public void updateTransacciones() {
		if (organizacion == null) {
			return;
		}
		transacciones = transaccionService
				.getTransaccionesByOrganizacion(organizacion);
		if (transacciones != null) {
			totalTransacciones = transacciones.size();
			Map<String, Object> params = new HashMap<String, Object>();
			params.put("transaciones", transacciones);
			BindUtils.postGlobalCommand(null, null, "transactionsByFirma",
					params);
		}
	}

	public String getCompania() {
		return compania;
	}

	public void setCompania(String compania) {
		this.compania = compania;
	}

	public String getUsuario() {
		return usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public List<Transaccion> getTransacciones() {
		return transacciones;
	}

	public void setTransacciones(List<Transaccion> transacciones) {
		this.transacciones = transacciones;
	}

	public int getTotalTransacciones() {
		return totalTransacciones;
	}

	public void setTotalTransacciones(int totalTransacciones) {
		this.totalTransacciones = totalTransacciones;
	}

}
